(library (print-utils)
  (export print-limited)
  (import
    (except (rnrs base) let-values map error)
    (only (guile)
          lambda* λ
          current-output-port
          call-with-output-string
          simple-format)
    (ice-9 pretty-print)
    (ice-9 textual-ports)))


(define print-limited
  (lambda* (object
            #:optional (output-port (current-output-port))
            #:key (max 1024))
    (let ([pretty-output
           (call-with-output-string
             (λ (port)
               (cond
                [(string? object) (put-string port object)]
                [else (pretty-print object #:port port)])))])
      (let ([limited-message
             (substring pretty-output
                        0
                        (min max (string-length pretty-output)))])
        (simple-format output-port "~a\n" limited-message)))))
